home *** CD-ROM | disk | FTP | other *** search
- 10 '' QUICKSORT SORTING ALGORITHM DEMONSTRATION
- 20 '' NELSON FORD APRIL 1984
- 30 ''
- 40 DEFINT A-Z: CLS: KEY OFF: COLOR 7,0: LAST=26: DIM DTA$(LAST)
- 50 FOR I=1 TO LAST: READ DTA$(I): NEXT
- 60 DATA H,G,C,V,B,N,M,A,S,D,F,Z,X,J,K,L,Q,I,O,W,E,R,T,Y,U,P
- 70 FLAG1=-1: FLAG2=-1: FLAG3=-1
- 75 COLR1= 7: COLR2= 15: COLR3= 0
- 80 GOSUB 460
- 90 '
- 100 '''''''''''sort:
- 110 '
- 120 BOT(1)=1: TOP(1)=LAST: PLY=1
- 130 WHILE PLY > 0
- 140 IF BOT(PLY) >= TOP(PLY) THEN PLY=PLY-1: GOTO 300
- 150 I=BOT(PLY)-1: J=TOP(PLY): KY$=DTA$(J)
- 160 WHILE I < J
- 170 I=I+1: J=J-1
- 180 LN=180: WHILE DTA$(I) < KY$: I=I+1: GOSUB 330: WEND
- 190 IF FLAG1 THEN GOSUB 530
- 200 LN=200: WHILE DTA$(J) > KY$ AND J > I: J=J-1: GOSUB 330: WEND
- 210 IF FLAG2 THEN GOSUB 600
- 220 IF I<J THEN LN=220: GOSUB 690 'go swap
- 230 WEND
- 240 IF FLAG3 THEN GOSUB 630
- 250 J=TOP(PLY): IF I=J THEN 280
- 260 LN=260: GOSUB 330
- 270 IF DTA$(I) > DTA$(J) THEN LN=270: GOSUB 690
- 280 IF I-BOT(PLY) < TOP(PLY)-I THEN BOT(PLY+1)=BOT(PLY): TOP(PLY+1)=I-1: BOT(PLY)=I+1: ELSE TOP(PLY+1)=TOP(PLY): BOT(PLY+1)=I+1: TOP(PLY)=I-1
- 290 PLY=PLY+1
- 300 WEND
- 310 COLOR 15: PRINT "SORTED: ";: FOR I=1 TO 26: PRINT " "DTA$(I);: NEXT
- 320 END
- 330 '
- 340 PRINT LN" ";
- 350 FOR X=FIRST TO LAST
- 360 FG=7: BG=0 'foreground and background colors
- 370 IF X = I THEN FG=15
- 380 IF X = J THEN BG= 7: IF FG=7 THEN FG=0
- 390 IF X = TOP(PLY) THEN FG=FG+16
- 400 IF X < BOT(PLY) OR X > TOP(PLY) THEN FG=1
- 410 COLOR FG,BG
- 420 PRINT " " DTA$(X);: COLOR 7,0
- 430 NEXT: PRINT
- 440 RETURN
- 450 '
- 460 PRINT "FIRST SEARCH UP THE LIST UNTIL AN ";: COLOR 15
- 470 PRINT "ITEM ";: COLOR 7
- 480 PRINT "LARGER THAN THE ";: COLOR 23
- 490 PRINT "KEY";: COLOR 7: PRINT " IS FOUND,": PRINT
- 500 PRINT "PROGRAM ": PRINT "LINE #": XXX=9
- 510 RETURN
- 520 '
- 530 PRINT :PRINT "THEN SEARCH DOWN THE LIST UNTIL AN ";: COLOR 0,7
- 540 PRINT " ITEM";: COLOR 7,0
- 550 PRINT " LESS THAN THE ";: COLOR 23
- 560 PRINT "KEY";: COLOR 7: PRINT " IS FOUND. (GO";
- 570 INPUT X$: FLAG1=0
- 580 RETURN
- 590 '
- 600 INPUT "IF POINTERS HAVE NOT CROSSED, SWAP ITEMS AND CONTINUE. (GO"; X$
- 610 FLAG2=0: RETURN
- 620 '
- 630 PRINT"WHEN THE POINTERS CROSS, DIVIDE THE LIST AND SORT THE SMALLER PART."
- 640 PRINT"BUT FIRST, COMPARE THE ";: COLOR 15
- 650 PRINT"ITEM";: COLOR 7: PRINT " AT THE BREAK TO THE ";: COLOR 23:
- 660 PRINT "KEY": COLOR 7: PRINT " AND SWAP IF ";: COLOR 15
- 670 PRINT"ITEM";: COLOR 7: INPUT " IS LARGER. (GO"; X$
- 680 FLAG3=0: RETURN
- 690 SWAP DTA$(I), DTA$(J): PRINT TAB(27)"SWAP " DTA$(J) " AND " DTA$(I)
- 700 GOSUB 330: RETURN